#ifndef ACCEPTOR
#define ACCEPTOR

#include "Socket.h"
#include "EventLoop.h"
#include "Channel.h"

class Acceptor
{
private:
    // 参数为监听套接字，新连接触发的事件如何处理的回调函数
    using AcceptorCallBack = std::function<void(int)>;
    void HandleRead();
    int CreateServer(uint16_t port);

public:
    Acceptor(EventLoop *loop, uint16_t port);
    void SetAcceptorCallBack(const AcceptorCallBack &);
    void Listen();

private:
    Socket _socket;   // 创建监听套接字
    EventLoop *_loop; // 对套接字进行事件监控
    Channel _channel; // 对套接字进行事件管理
    AcceptorCallBack _accept_cb;
};

#endif